package com.briup.corejava.day13;

import com.briup.corejava.day10.pojo.Student;

import java.util.*;

/**
 * map集合的操作
 * 1、HashMap：无序、key不可重复
 * 2、TreeMap：有序、key不可重复
 * 3、LinkedHashMap：存取顺序一致，key不能重复
 */
public class Test2 {
    public static void main(String[] args) {
        Map<Student,String> map1 = new HashMap<>();
        map1.put(new Student("zs",20),"张三");
        map1.put(new Student("ls",22),"张三");
        map1.put(new Student("wu",21),"张三");
        map1.put(new Student("zs",19),"张三");
        // put方法，如果key不存在，则代表新增
        // 如果key相同，则代表修改
        map1.put(new Student("zs",19),"李四");
        // 验证对象是否在key的集合中
        System.out.println(map1.containsKey(new Student("wu", 21)));
        // 验证对象是否在value的集合中
        System.out.println(map1.containsValue("李四"));
        // 遍历map集合，第一种方式，通过key取value
        Set<Student> keySet = map1.keySet();
        for(Student s : keySet){
            String value = map1.get(s);
            System.out.println("key: "+s+" ,value: "+value);
        }
        // 获取所有的values
        Collection<String> values = map1.values();

        // 定义比较器
        Comparator<Integer> comp = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2-o1;
            }
        };

        // 先使用自然排序，定义好比较器之后再传入构造器中做比较器排序
        Map<Integer,String> map2 = new TreeMap<>(comp);
        map2.put(1001,"zs");
        map2.put(1020,"ls");
        map2.put(1034,"ww");
        map2.put(1017,"zs");
        // 遍历，使用entrySet遍历
        // 获取所有键值对的集合
        Set<Map.Entry<Integer, String>> entries = map2.entrySet();
        for(Map.Entry<Integer,String> entry : entries){
            // 每个entry就是每个键值对
            Integer key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key+" - "+value);
        }
        // 存取数据一致
        Map<String,Object> map3 = new LinkedHashMap<>();
        map3.put("hello",new Student());
        map3.put("world",true);
        map3.put("tom",20);
        System.out.println(map3);
    }
}
